﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using vite_entity.Entities;

namespace vite_entity.EntityTypeConfig
{
    public class SysMenu_TypeConfig : IEntityTypeConfiguration<SysMenu>
    {
        public void Configure(EntityTypeBuilder<SysMenu> entity)
        {
            entity.HasKey(e => e.Id).HasName("PRIMARY");

            entity
                .ToTable("sys_menu", tb => tb.HasComment("菜单管理"))
                .UseCollation("utf8mb4_general_ci");

            entity.Property(e => e.Id)
                .HasComment("ID")
                .HasColumnName("id");
            entity.Property(e => e.AlwaysShow)
                .HasComment("【目录】只有一个子路由是否始终显示（1-是 0-否）")
                .HasColumnName("always_show");
            entity.Property(e => e.Component)
                .HasMaxLength(128)
                .HasComment("组件路径（组件页面完整路径，相对于 src/views/，缺省后缀 .vue）")
                .HasColumnName("component");
            entity.Property(e => e.CreateTime)
                .HasComment("创建时间")
                .HasColumnType("datetime")
                .HasColumnName("create_time");
            entity.Property(e => e.Icon)
                .HasMaxLength(64)
                .HasDefaultValueSql("''")
                .HasComment("菜单图标")
                .HasColumnName("icon");
            entity.Property(e => e.KeepAlive)
                .HasComment("【菜单】是否开启页面缓存（1-是 0-否）")
                .HasColumnName("keep_alive");
            entity.Property(e => e.Name)
                .HasMaxLength(64)
                .HasDefaultValueSql("''")
                .HasComment("菜单名称")
                .HasColumnName("name");
            entity.Property(e => e.Params)
                .HasComment("路由参数")
                .HasColumnType("json")
                .HasColumnName("params");
            entity.Property(e => e.ParentId)
                .HasComment("父菜单ID")
                .HasColumnName("parent_id");
            entity.Property(e => e.Perm)
                .HasMaxLength(128)
                .HasComment("【按钮】权限标识")
                .HasColumnName("perm");
            entity.Property(e => e.Redirect)
                .HasMaxLength(128)
                .HasComment("跳转路径")
                .HasColumnName("redirect");
            entity.Property(e => e.RouteName)
                .HasMaxLength(255)
                .HasComment("路由名称（Vue Router 中用于命名路由）")
                .HasColumnName("route_name");
            entity.Property(e => e.RoutePath)
                .HasMaxLength(128)
                .HasDefaultValueSql("''")
                .HasComment("路由路径（Vue Router 中定义的 URL 路径）")
                .HasColumnName("route_path");
            entity.Property(e => e.Sort)
                .HasDefaultValueSql("'0'")
                .HasComment("排序")
                .HasColumnName("sort");
            entity.Property(e => e.TreePath)
                .HasMaxLength(255)
                .HasComment("父节点ID路径")
                .HasColumnName("tree_path");
            entity.Property(e => e.Type)
                .HasComment("菜单类型（1-菜单 2-目录 3-外链 4-按钮）")
                .HasColumnName("type");
            entity.Property(e => e.UpdateTime)
                .HasComment("更新时间")
                .HasColumnType("datetime")
                .HasColumnName("update_time");
            entity.Property(e => e.Visible)
                .IsRequired()
                .HasDefaultValueSql("'1'")
                .HasComment("显示状态（1-显示 0-隐藏）")
                .HasColumnName("visible");
        }
    }
}
